package com.ly.pj.module.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.ly.pj.module.pojo.ResponseResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

@RestController//也叫Handler（通过此对象处理DispatcherServlet分发过来的请求）
@ResponseBody//交给spring管理(@ResponseBody+@Controller=@RestController)
public class JsonObjectController {
    @RequestMapping("/doGetResponse")
    public ResponseResult doHandlerRequest(){
        ResponseResult responseResult=new ResponseResult();
        responseResult.setCode(200);
        responseResult.setMessage("OK");
        return responseResult;
    }
    /*只返回数据*/
    @RequestMapping("/getHealthJSON")

    //此注解描述控制层的方法时，用于告诉框架，这个方法的返回值会被spring框架尽量转为特定约束格式（例如json）
    //然后将转换以后的结果写到response对象的响应体中，而且方法的返回值不再封装为ModelAndView对象，不会再交
    //给视图解析器（ViewResolver）进行解析，而是直接基于response对象响应到客户端
    public Map<String, Object> doHealth(){
        Map<String,Object> map=new HashMap<>();
        map.put("username","小张");
        map.put("state","正常");
        return  map;
    }
    @RequestMapping("/doPrint")
    //@ResponseBody//可写可不写
    public void doPrint(HttpServletResponse response)throws Throwable{
        Map<String,Object> map=new HashMap<>();
        map.put("username","小李");
        map.put("state","正常");
        //将map中的数据转化为json格式字符串
        ObjectMapper objectMapper=new ObjectMapper();
        String jsonStr=objectMapper.writeValueAsString(map);
        System.out.println("JSON="+jsonStr);
        //将字符串响应到客户端
        //response.setCharacterEncoding("GBK");
        //告诉客户端，要向它响应的数据类型为text/html，编码为utf-8请以这种编码进行数据呈现
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println(jsonStr);
    }
}
